package com.atguigu.tingshu.album.service.impl;

import com.atguigu.tingshu.album.mapper.AlbumAttributeValueMapper;
import com.atguigu.tingshu.album.mapper.AlbumInfoMapper;
import com.atguigu.tingshu.album.mapper.AlbumStatMapper;
import com.atguigu.tingshu.album.service.AlbumInfoService;
import com.atguigu.tingshu.common.constant.SystemConstant;
import com.atguigu.tingshu.common.util.AuthContextHolder;
import com.atguigu.tingshu.model.album.AlbumAttributeValue;
import com.atguigu.tingshu.model.album.AlbumInfo;
import com.atguigu.tingshu.model.album.AlbumStat;
import com.atguigu.tingshu.vo.album.AlbumAttributeValueVo;
import com.atguigu.tingshu.vo.album.AlbumInfoVo;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;

import java.util.List;

@Slf4j
@Service
@SuppressWarnings({"unchecked", "rawtypes"})
public class AlbumInfoServiceImpl extends ServiceImpl<AlbumInfoMapper, AlbumInfo> implements AlbumInfoService {

	@Autowired
	private AlbumInfoMapper albumInfoMapper;

	// 属性值
	@Autowired
	private AlbumAttributeValueMapper albumAttributeValueMapper;

	// 专辑状态信息
	@Autowired
	private AlbumStatMapper albumStatMapper;

	@Override
	public void saveAlbumInfo(AlbumInfoVo albumInfoVo) {
		// 1.保存专辑信息表
		AlbumInfo albumInfo = new AlbumInfo();
		// 把相同属性进行拷贝
		BeanUtils.copyProperties(albumInfoVo,albumInfo);
		// TODO userId先设置默认值，等做了登录以后再改
		Long userId = AuthContextHolder.getUserId();
		albumInfo.setUserId(userId == null? 1: userId);
		// 包含声音数
		albumInfo.setIncludeTrackCount(0);
		// 非免费才需要设置免费试听声音数
		if (!albumInfoVo.getPayType().equals(SystemConstant.ALBUM_PAY_TYPE_FREE)){
			albumInfo.setTracksForFree(5);
		}
		// 审核状态
		albumInfo.setStatus(SystemConstant.ALBUM_STATUS_NO_PASS);
		this.save(albumInfo);
		Long albumId = albumInfo.getId();

		// 2.保存专辑标签信息
		List<AlbumAttributeValueVo> albumAttributeValueVoList = albumInfoVo.getAlbumAttributeValueVoList();
		if (!CollectionUtils.isEmpty(albumAttributeValueVoList)){
			// 便利标签值进行保存
			albumAttributeValueVoList.forEach(albumAttributeValueVo -> {
				AlbumAttributeValue albumAttributeValue = new AlbumAttributeValue();
				BeanUtils.copyProperties(albumAttributeValueVo, albumAttributeValue);
				albumAttributeValue.setAlbumId(albumId);
				this.albumAttributeValueMapper.insert(albumAttributeValue);
			});
		}
		// 3.保存初始化统计信息
		initAlbumStat(albumId, SystemConstant.ALBUM_STAT_PLAY);
		initAlbumStat(albumId, SystemConstant.ALBUM_STAT_SUBSCRIBE);
		initAlbumStat(albumId, SystemConstant.ALBUM_STAT_BROWSE);
		initAlbumStat(albumId, SystemConstant.ALBUM_STAT_COMMENT);
	}

	private void initAlbumStat(Long albumId,String statType) {
		AlbumStat albumStat = new AlbumStat();
		albumStat.setAlbumId(albumId);
		albumStat.setStatType(statType);
		this.albumStatMapper.insert(albumStat);
	}
}
